package com.fg.cloud.manager.mapper.agency;

import java.math.BigDecimal;
import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;

import com.fg.cloud.common.PageUtils;
import com.fg.cloud.common.construction.Tree;
import com.fg.cloud.manager.entry.agency.AgencyProductEntity;
import com.fg.cloud.manager.entry.agency.vo.AgencyProductVo;
import com.fg.cloud.manager.mapper.BaseMapper;

/**
 * 经销商-产品权限
 * @author around
 * @date 2017-6-26
 */
public interface AgencyProductMapper extends BaseMapper {
	
    int deleteByPrimaryKey(Long id);
    
    AgencyProductEntity selectByPrimaryKey(Long id);
    
    /**
     * Description:删除经销商（价格政策/订货权限）数据
     * @param tablename 表名
     * @param facId 厂商ID
     * @param ageId 经销商ID
     * @param ids 待删除ID集合
     * @return int
     * @author around
     * @date 2017年8月4日下午2:02:38
     */
    int deletes(@Param("tablename")String tablename, @Param("facId")Long facId, 
    		@Param("ageId")Long ageId, @Param("ids")Long[] ids, @Param("type") Integer type);
    
    /**
     * Description:删除当前厂商的经销商订货权限&经销商特价管理
     * @param tablename
     * @param facId
     * @return
     * @author dingjiang
     * @date 2017年11月6日下午5:50:20
     */
    long delByfacId(@Param("tablename")String tablename, @Param("facId")Long facId);
    
    /**
     * 查询表是否存在
     * @param dataBase 数据库名
     * @param tableName 表名
     * @return int >0:存在
     */
    //@Select("select count(table_name) from information_schema.tables where table_name = #{tableName} and table_schema = #{dataBase}")
    int selectTableExist(@Param("dataBase")String dataBase, @Param("tableName")String tableName);
    
    /**
     * 创建表 t_agency_product_*
     * @param tablename
     * @return
     */
    //@Update("create table ${tablename} as select * from t_agency_product where 1<> 1")
    int createTable(@Param("tablename")String tablename);

    /**
     * Description:查询符合条件的总记录数 by 厂商 -- 经销商价格政策 列表
     * @param pageinfo
     * @return
     * @author around
     * @date 2017年8月4日上午8:56:37
     */
    long findCountByAgencyPrice(PageUtils<AgencyProductVo> pageInfo);
    
    /**
     * Description:查询符合条件的记录 by 厂商 -- 经销商价格政策 列表
     * @param pageInfo
     * @return List<AgencyProductVo>
     * @author around
     * @date 2017年8月4日上午8:57:55
     */
    List<AgencyProductVo> findByAgencyPrice(PageUtils<AgencyProductVo> pageInfo);
    
    /**
     * Description:查询符合条件的总记录数 by 厂商 -- 经销商价格政策 新增
     * @param pageInfo
     * @return long
     * @author around
     * @date 2017年8月4日下午4:38:08
     */
    long findSelectCountByAgencyPrice(PageUtils<AgencyProductVo> pageInfo);
    
    /**
     * Description:查询符合条件的数据 by 厂商 -- 经销商价格政策 新增
     * @param pageInfo
     * @return List<AgencyProductVo>
     * @author around
     * @date 2017年8月4日下午4:48:09
     */
    List<AgencyProductVo> findSelectByAgencyPrice(PageUtils<AgencyProductVo> pageInfo);
    
    /**
     * Description:批量新增 by 厂商 -- 经销商价格政策
     * @param tablename 表名
     * @param list List<AgencyProductEntity>
     * @return int
     * @author around
     * @date 2017年8月7日上午11:01:21
     */
    int batchInsertByAgencyPrice(@Param("tablename")String tablename, 
    		@Param("list")List<AgencyProductEntity> list);
    
    //========================================================
    
    /**
     * Description:查询经销商订货权限 by 商品分类 -- 厂商端查询使用 
     * @param tablename
     * @param facId
     * @param ageId
     * @return List<Tree>
     * @author around
     * @date 2017年8月17日上午10:44:07
     */
    List<Tree> selectAgencyCategorys(@Param("tablename")String tablename,
    		@Param("facId")Long facId, @Param("ageId")Long ageId);
    
    /**
     * Description:厂商平台 - 经销商订货权限 - 订货权限新增查询 
     * @param tablename 表名
     * @param facId 厂商ID
     * @param ageId 经销商ID
     * @return List<Tree>
     * @author around
     * @date 2017年8月16日下午5:10:22
     */
    List<Tree> selectAddAgencyProductByCategorys(@Param("tablename")String tablename,
    		@Param("facId")Long facId, @Param("ageId")Long ageId);
    
    /**
     * 批量新增 - 新增经销商指定产品分类信息
     * @param tablename
     * @param facId
     * @param ageId
     * @param type
     * @param categoryIds
     * @return
     */
    int batchInsertsByCategorys(@Param("tablename") String tablename, 
    		@Param("facId")Long facId, @Param("ageId")Long ageId, 
    		@Param("type") Integer type, @Param("categoryIds")String[] categoryIds);
    
    /**
     * 批量删除 - 删除经销商指定产品分类信息
     * @param tablename 
     * @param facId
     * @param ageId
     * @param categoryIds
     * @return
     */
    int batchDeletesByCategorys(@Param("tablename") String tablename, @Param("facId")Long facId, 
    		@Param("ageId")Long ageId, @Param("categoryIds")Long[] categoryIds);
    
    /**
     * 查询经销商订货权限商品 -- 经销商端查询使用
     * @param pageinfo
     * @return long
     */
    long selectCountAgencyProductByCategorys(PageUtils<AgencyProductVo> pageinfo);
    
    /**
     * 查询经销商订货权限 by 商品分类 -- 经销商端查询使用
     * @param pageinfo
     * @return
     */
    List<AgencyProductVo> selectAgencyProductByCategorys(PageUtils<AgencyProductVo> pageinfo);
    
    /**
     * 批量删除经销商产品权限
     * @param facId 厂商ID
     * @param ageId 经销商ID
     * @param proIds 厂商ID集合
     * @param skuIds 产品SKU集合
     * @return int
     */
    int batchDeletes(@Param("tablename") String tablename, 
    		@Param("facId")Long facId, @Param("ageId")Long ageId, 
    		@Param("skuIds")String[] skuIds);
    
    
   /**
    * 查询经销商可新增订货权限数据数量
    * @param pageinfo
    * @return long
    */
	long selectCountByAgencyProduct(PageUtils<AgencyProductVo> pageinfo);
       
	/**
	* 查询经销商可新增订货权限信息，分页
	* @param pageinfo
	* @return List<AgencyProductVo>
	*/
	List<AgencyProductVo> selectByAgencyProduct(PageUtils<AgencyProductVo> pageinfo);
	
	@Update("update ${tablename} set price = #{price} where id = #{id}")
	int updatePrice(@Param("tablename")String tablename, @Param("id")Long id, 
			@Param("price")BigDecimal price);
}